package com.rzcode.coinex.kernel.dao.entity;

import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.format.annotation.DateTimeFormat;

import java.math.BigDecimal;
import java.time.LocalDateTime;

/**
 * 分红开启记录实体类，用于记录分红活动的开始时间、结束时间、分红比例、分红数量等关键信息。
 */
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@TableName(value = "dividend_start_record")
public class DividendStartRecord {

    /**
     * 分红记录ID，自增主键。
     */
    @ApiModelProperty(value = "分红记录ID", example = "1")
    private Long id;

    /**
     * 开始时间戳，表示分红活动开始的时间。
     */
    @ApiModelProperty(value = "开始时间戳", example = "1677638400")
    private Long start;

    /**
     * 开始日期，表示分红活动开始的具体日期时间。
     */
    @ApiModelProperty(value = "开始日期", example = "2023-03-01 00:00:00")
    private LocalDateTime startDate;

    /**
     * 结束时间戳，表示分红活动结束的时间。
     */
    @ApiModelProperty(value = "结束时间戳", example = "1677724799")
    private Long end;

    /**
     * 结束日期，表示分红活动结束的具体日期时间。
     */
    @ApiModelProperty(value = "结束日期", example = "2023-03-02 23:59:59")
    private LocalDateTime endDate;

    /**
     * 创建时间，记录分红记录创建的时间。
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @ApiModelProperty(value = "创建时间", example = "2023-03-01 12:00:00")
    private LocalDateTime date;

    /**
     * 计量单位，表示分红数量的计量单位，如“股”、“份”等。
     */
    @ApiModelProperty(value = "计量单位", example = "股")
    private String unit;

    /**
     * 分红比例，表示分红的比例。
     */
    @ApiModelProperty(value = "分红比例", example = "0.10")
    private BigDecimal rate;

    /**
     * 分红数量，表示分红的具体数量。
     */
    @ApiModelProperty(value = "分红数量", example = "100000.000000")
    private BigDecimal amount;

    /**
     * 管理员信息，关联管理员表，表示发起分红活动的管理员。
     */
    @ApiModelProperty(value = "管理员信息", hidden = true)
    private Admin admin;
}

